from sshtunnel import SSHTunnelForwarder
import pymysql
import pandas as pd  
import time  
start_time = time.time()  

# SSH连接信息  
ssh_hostname = '39.106.159.33'  
ssh_port = 22  
ssh_username = 'liyishan'  
private_key_path = '/Users/liyishan/.ssh/id_rsa'  
# MySQL连接信息（在远程服务器上）  
mysql_hostname = 'rm-2zejb98y68r4q6d16.mysql.rds.aliyuncs.com'  # 或者远程服务器上的MySQL服务器地址  
mysql_port = 3306  
mysql_username = 'liyishan'  
mysql_password = 'Liyishan@2023'  
mysql_db = 'deal'  
# 创建SSH客户端  
server = SSHTunnelForwarder(
    ssh_address_or_host=(ssh_hostname, 22),  # 默认端口号为 22
    ssh_username=ssh_username,  # SSH 用户名（如果使用 pem 公钥可不设置）
    ssh_password="",  # SSH 密码（如果使用 pem 公钥可不设置）
    ssh_pkey=private_key_path,  # pem 公钥路径（如设置用户名和密码可不设置）
    remote_bind_address=(mysql_hostname, 3306)
)
server.start()

# 注意：SSH通常不直接用于数据库连接，但你可以通过SSH隧道或端口转发  
# 这里我们假设你已经在SSH服务器上设置了MySQL的端口转发，或者你可以使用SSH隧道库（如sshtunnel）  
  
# 由于直接通过SSH执行数据库查询比较复杂，通常我们使用SSH隧道或端口转发  
# 这里我们省略了设置SSH隧道的步骤，因为它依赖于你的具体环境和SSH服务器的配置  
  
# 假设你已经有了某种方式通过SSH安全地访问了MySQL  
# 使用pymysql连接到MySQL数据库（这里跳过SSH隧道设置）  
#connection = pymysql.connect(host=mysql_hostname, port=mysql_port, user=mysql_username, password=mysql_password, db=mysql_db)  
conn = pymysql.connect(host='127.0.0.1',port=server.local_bind_port,user=mysql_username,passwd=mysql_password,db=mysql_db)
cur = conn.cursor()
# 执行SQL查询  
sql_file_path = 'exportSql.sql'  
with open(sql_file_path, 'r') as file:  
    query = file.read()  
cur.execute(query)
column_names = [description[0] for description in cur.description]  

res = cur.fetchall()
end_time = time.time()  
execution_time = end_time - start_time  
print(f"执行时间: {execution_time} 秒")

df = pd.DataFrame(res, columns=column_names)  

  
# 步骤 3: 将DataFrame导出到Excel文件  
excel_path = 'output-pro.xlsx'  
df.to_excel(excel_path, index=False, engine='openpyxl')  
  
# 关闭数据库连接  
cur.close()  
print(f"Data exported to {excel_path}")